package com.atguigu.shiro.factory;

import java.util.LinkedHashMap;

public class FilterChainDefinitionMapBuilder {

	public LinkedHashMap<String, String> buildFilterChainDefinitionMap(){
		
		/*
		<property name="filterChainDefinitionMap" ref="filterChainDefinitionMap"></property>
		    
		    <!--  
				格式:url=拦截器
				**url权限采取第一次第一次匹配优先的方式**
		    	配置哪些页面需要受保护. 
		    	以及访问这些页面需要的权限. 
		    	1). anon 可以被匿名访问
		    	2). authc 必须认证(即登录)后才可能访问的页面. 
		    	3). logout 登出.
		    	4). roles 角色过滤器
		    -->
		    <!--  
		    <property name="filterChainDefinitions">
		        <value>
		            /login.jsp = anon
		            /shiro/login = anon
		            /shiro/logout = logout
		            
		            /user.jsp = roles[user]
		            /admin.jsp = roles[admin]
		            
		            # everything else requires authentication:
		            /** = authc
		        </value>
		    </property>
		    -->
		</bean>
		
		<!-- 配置一个 bean, 该 bean 实际上是一个 Map. 通过实例工厂方法的方式 -->
		<bean id="filterChainDefinitionMap" 
			factory-bean="filterChainDefinitionMapBuilder" factory-method="buildFilterChainDefinitionMap"></bean>
		
		<bean id="filterChainDefinitionMapBuilder"
			class="com.atguigu.shiro.factory.FilterChainDefinitionMapBuilder"></bean>
			
			通过修改以上配置，将写死在xml中的权限，修改为从数据库查询的方式，放到map中；更加灵活！！
			
		*/
	   //这里采用LinkHashMap,保证map中元素的顺序；url第一次匹配优先！！
		LinkedHashMap<String, String> map = new LinkedHashMap<>();
		
		map.put("/login.jsp", "anon");
		map.put("/shiro/login", "anon");
		map.put("/shiro/logout", "logout");
		map.put("/user.jsp", "authc,roles[user]");
		map.put("/admin.jsp", "authc,roles[admin]");
		map.put("/list.jsp", "user");
		
		map.put("/**", "authc");
		
		return map;
	}
	
}
